package leetcode.l0526;

import java.util.Stack;

/**
 * 1190. 反转每对括号间的子串
 * 给出一个字符串s（仅含有小写英文字母和括号）。
 * 请你按照从括号内到外的顺序，逐层反转每对匹配括号中的字符串，并返回最终的结果。
 * 注意，您的结果中 不应 包含任何括号

 * @author Retain
 * @date 2021/5/26 16:57
 */

public class 每日一题_1190 {

    public static void main(String[] args) {
//        reverseParentheses("(abcd)");
        reverseParentheses("(u(love)i)");
    }

    public static String reverseParentheses(String s) {
        Stack<String> stack = new Stack<>();
        char[] chars = s.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (char c : chars) {
            // 如果遇到左括号，把当前的str压入栈，str清空
            if (c == '(') {
                stack.push(sb.toString());
                sb.setLength(0);
                // 如果遇到右括号，先把当前str反转，然后在头部添加栈顶元素
            }else if (c == ')') {
                sb.reverse();
                sb.insert(0,stack.pop());
            }else {
                // 如果没有遇到括号，sb一直追加
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
